Introducción a Android
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Introducción a Android: un poco de historia
Introducción a Android: releases Versión Android Fecha release Android 1.5 (Cupcake) 30 abril de 2009 Android 1.6 (Donut) 15 septiembre de 2009 Android 2.0 (Eclair) 26 octubre de 2009 Android 2.2 (FroYo) Mayo de 2010 Gingerbread Finales de 2010
Introducción a Android: un poco de historia (II) Prototipo HTC Dream Nexus One Xperia x10 HTC Liquid GeeksPhone Samsung I7500
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Introducción a Android: ¿qué es Android? ¿Qué es? Conjunto de software libre que incluye sistema operativo, middleware y aplicaciones. Su objetivo es abstraer el hardware y facilitar el desarrollo de nuevas aplicaciones. SDK: soporte y API para desarrollo de aplicaciones Android. ¿Qué no es? Únicamente un dispositivo móvil Una implementación JAVA ME. Una marca de telefonía ni depende de ningún fabricante La respuesta de Google al IPhone.
Introducción a Android: ¿qué es Android? (II) Características: Conectividad: Navegador integrado, basado en WebKit  Soporte telefonía GSM, depende del hardware del teléfono Bluetooth, EDGE, 3G y WI-FI,  depende del hardware del teléfono  Software: Gráficos optimizados con OpenGL ES 1.0 (Android 2.0 OpenGL ES 2.0) SQLite para el almacenamiento de datos estructurados (Bases de datos)  Entorno de desarrollo: emulador, debugger, herramientas de profiling  Hardware y multimedia Soporte multimedia, tipo MPEG4, MP3, AMR, JPG, GIF...  Camara, GPS, Brújula, acelerómetro, depende del hardware del teléfono
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Arquitectura Android
Arquitectura Android :Linux Kernel Versión 2.6 del kernel de Linux Android aprovecha la seguridad, gestión de memoria, gestión de procesos, red y modelo de drivers Capa de abstracción entre el hardware y el software
Arquitectura Android:Linux Kernel (II) Relación versiones Linux por versión Android Versión Android Versión Linux Android 1.5 (Cupcake) 2.6.27 Android 1.6 (Donut) 2.6.29 Android 2.0 (Eclair) 2.6.29 Android 2.2 (Froyo) 2.6.32 Gingerbread  2.6.33
Arquitectura Android :Android runtime Utiliza el Kernel de Linux para la ejecución de aplicaciones, procesos y gestión de memoria. Formado por un conjunto de librerías base, para ofrecer funcionalidad elemental y de bajo nivel, escritas en C y C++ Máquina virtual Dalvik, con código preparado teniendo en cuenta la duración de las baterías y la limitación de memoria.
Arquitectura Android : Dalvik Virtual Machine Condicionantes de los dispositivos móviles: Poca duración de la batería Recursos muy escasos (memoria, cpu) Limitaciones visuales (pantallas poca resolución) Compartición y priorización de recursos Características de la DVM Usada en entornos con restricciones de memoria y procesador Herramienta dx convierte .class (clase o aplicación en JAVA) a dex Ejecuta aplicaciones en formato .dex (Dalvik Executable) Permite la ejecución de varias instancias a la vez No es una JVM, no ejecuta bytecode Clases de Java ME, AWT o Swing no están soportadas
Librerías Android (I) android.util: paquete de utilidades del core, clases de bajo nivel android.os: acceso a servicios básicos del sistema operativo: (mensajes, reloj...) android.text: mostrar y parsear (transformar) cadenas de texto android.database: gestión de las DBs, cursores, etc android.content: servicios para el acceso a distintos tipos de recursos android.view: clases para la gestión de las vistas android.widget: artefactos nativos de Android: listas, botones ... com.google.android.maps: acceso a controles nativos para mapas
Librerías Android (II) android.app: acceso al contexto de la aplicación, Actividades y API de servicios android.provider: acceso a ciertos Content Providers android.telephony: acceso a los dispositivos del telefono para comunicación (call, send SMS...) android.location: servicios basados en localización android.media: grabación y reproducción de audio, video, imagenes.. android.opengl: motor de renderización 3D android.hardware: acceso a la cámara, acelerómetro, brújula... Otras librerías: OpenGL, FreeType, SGL, libc, SQLite, SSL
Arquitectura Android : Framework de aplicaciones Proporciona una plataforma abierta para el desarrollo El desarrollador puede acceder a los dispositivos, información de ubicación, ejecutar servicios, etc, a través del framework Las aplicaciones del core utilizan este mismo framework Views, Content Providers, Managers...
Arquitectura Android: Capa de aplicaciones En esta capa de ubicarán las aplicaciones desarrolladas por el desarrollador Aplicaciones escritas en lenguaje JAVA Aplicaciones incluidas por defecto: Cliente email Gestor SMS Navegador Contactos .JAVA .CLASS .DEX javac dx JVM DVM
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Arquitectura de las aplicaciones: Componentes de aplicación Principales componentes para el  desarrollo  de aplicaciones en Android:
Entorno de desarrollo: AndroidManifest.xml Cada aplicación debe tener un archivo AndroidManifest.xml en el directorio raíz que define los componentes de aplicación (Activities, Services, etc) que se verán a continuación Da un nombre único a la aplicación, con formato package de Java (com.slashmobility.helloWorld ...) Se declaran permisos y librerías necesarios para ejecutar la aplicación <? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> < manifest   xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; package = &quot;prueba.Android&quot; android:versionCode = &quot;1&quot; android:versionName = &quot;1.0&quot; > < application   android:icon = &quot;@drawable/icon&quot;   android:label = &quot;@string/app_name&quot; > < activity   android:name = &quot;.HelloWord&quot; android:label = &quot;@string/app_name&quot; > < intent-filter > < action   android:name = &quot;android.intent.action.MAIN&quot;   /> < category   android:name = &quot;android.intent.category.LAUNCHER&quot;   /> </ intent-filter > </ activity > </ application > < uses-sdk   android:minSdkVersion = &quot;7&quot;   /> </ manifest >
Contiene una interfaz visual gráfica Cada Activity debe tener una responsabilidad propia (alta cohesión,  bajo acoplamiento) Una aplicación Android puede contener varias Activity, una de ellas marcada como principal Pueden usar componentes visuales, servicios, crear Intents, etc Una Activity puede invocar a otra (subActivity) Arquitectura de las aplicaciones: Componente Activity
Ciclo de vida de la Activity ANR si la Activity no responde a un evento en 5 segundos Mensaje ANR Estados de la Activity
Arquitectura de las aplicaciones: Componente Service Se ejecutan en el background (no tienen UI).  Pueden actualizar Content Providers, lanzar Intents, notificaciones... Tienen más prioridad que la Activity estándar Aplicaciones que no necesitan interacción con el usuario son buenas candidatas a ser servicios Location Manager, Media Controller, Notification Manager son ejemplos de Services.
Ciclo de vida del Service (según creación)
Arquitectura de las aplicaciones: Componente Content Provider Mecanismo genérico para compartir datos entre aplicaciones Permite desacoplar la capa de aplicación de la capa de datos (data-source agnostic) Accesible utilizando una simple URI Browser: permite leer o modificar bookmarks, historial del navegador, o búsquedas web CallLog: permite ver o modificar el historial de llamadas (entrantes o salientes) Contacts: Recupera, modifica, o almacena detalles de contactos
Arquitectura de las aplicaciones: Intents Intent: usado como mecanismo para el paso de mensajes, declara la intención de realizar una acción Utilizados para iniciar Activities o difundir mensajes. Útiles para desacoplar componentes (no necesitan conocer implementaciones)  Existen acciones nativas que pueden ser lanzadas con los Intents (crean las Actividades para realizar esas acciones)
Arquitectura de las aplicaciones: Intents (II) Contienen : Action: La acción general a realizar, tal como ACTION_VIEW, ACTION_EDIT... Data: Los datos sobre los que la acción debe operar. Estos se expresan en forma URI (Uniform Resource Identifier) Ejemplo de pares Action / Data: ACTION_VIEW: content://contacts/people/1 ACTION_DIAL: tel://687123456 ACTION_DIAL: content://contacts/people/2
Arquitectura de las aplicaciones: Intents (III) Atributos adicionales: Category: ofrece información adicional sobre el tipo de componente que debe recoger el Intent Type: tipo MIME de los datos del Intent. No es necesario por defecto Component: indica qué componente (clase) especificado en AndroidManifest.xml realizará la acción del Intent. Si se especifica, se entregará a una instancia de esa clase, si no Android buscará el componente que mejor considere. Extras: información adicional, con pares key-value
Arquitectura de las aplicaciones: Intents (V) En los Intents, se puede especificar el destinatario o no: Si se establece un destinatario (vía setComponent(ComponentName)), se le envía directamente. Si no hay destinatario, se debe incluir suficiente información para que Android determine el mejor componente candidato para ejecutar el Intent Android utiliza los Intent-filters para buscar el mejor candidato
Intents: Acciones predeterminadas ACTION_ANSWER: Abre una Actividad para gestionar llamadas entrantes. ACTION_CALL: Inicia una llamada utilizando el número pasado en el URI. ACTION_DELETE: Borra una entrada de datos especificados en el URI. ACTION_DIAL: Aparece el dialer con el número especificado. ACTION_EDIT: Invoca una actividad para editar la información del URI. ACTION_INSERT: inserta nuevos items (por ejemplo, lista de contactos) ACTION_PICK: recupera información de un item ACTION_SEARCH: Invoca una actividad para realizar búsquedas. ACTION_SENDTO: envia un mensaje a un contacto. ACTION_SEND: envía la información especificada en el URI. ACTION_VIEW: petición para ver una información de la mejor manera posible. ACTION_WEB_SEARCH: realiza búsquedas Web de la información del URI.
Arquitectura de las aplicaciones: Intent filters Intent Intent
Arquitectura de las aplicaciones: Broadcast Intents Intent Intents
Arquitectura de las aplicaciones: Componente Broadcast Receiver Broadcast Receivers son utilizados para escuchar Broadcast Intents. Para utilizarlos, necesitan ser registrados (via código o AndroidManifest.xml) Se utilizan Intent Filters para especificar que Intents se están esperando
Arquitectura de las aplicaciones: Resources Los recursos (Resources) son elementos externos que se quieren incluir y referenciar en la aplicación Ejemplos: Imagenes, videos, audio, textos... Los recursos de /res son accesibles a través de la clase R (compilada por Android automáticamente) con R.carpeta.recurso Soporte para i18n
Arquitectura de las aplicaciones: Interfaces de usuario En Android, las interfaces se construyen utilizando los objetos View y ViewGroup Las Views son el punto de interacción con el usuario Las ViewGroup son una agrupación lógica de elementos visuales
Interfaces de usuario: Layouts También conocidos como Layout Managers Son extensiones de ViewGroup Su objetivo es controlar la posición de las Views hijas en la pantalla Se pueden anidar, es decir, incluir Layouts dentro de Layouts Android proporciona una serie de Layouts por defecto
Interfaces de usuario: Layouts (II) FrameLayout: el más simple, añade cada View hija en la esquina superior izquierda. Cada vez que se añade una, tapa la anterior, diseñado para mostrar un único elemento. LinearLayout: añade cada View hija en linea recta (horizontal o vertical) RelativeLayout: añade las Views relativamente unas a otras TableLayout: añade las Views usando un grid (cuadrícula), a través de filas y columnas. Es  similar a las tablas HTML. AbsoluteLayout: añade las vistas dando coordenadas absolutas LinearLayout RelativeLayout AbsoluteLayout
Arquitectura de las aplicaciones: Notificaciones al usuario Algunos sucesos requieren ser notificados al usuario Algunas notificaciones requieren respuesta del usuario, otras no Ejemplos: batería baja, confirmación de recepción de un archivo, barras de progreso, etc Para cada tipo de notificación se requerirá una manera concreta de informar al usuario: vibración, iluminación LEDs Toast Status Ba r Dialog
Interfaces de usuario: componentes compuestos (I) Normalmente hacen referencia a Views con funcionalidad compleja añadida Para crear widgets, se pueden crear Views y añadirle métodos para la gestión de eventos, componentes visuales, etc Se pueden extender (heredar) widgets de Android por defecto, sobreescribiendo la funcionalidad que se necesite
Interfaces de usuario: componentes compuestos (II) TextView EditText con un Button ListView Spinner
Interfaces de usuario: componentes compuestos (III) DatePicker TimePicker AutoComplete
Interfaces de usuario: Menus Revelan la funcionalidad de la aplicación Tres tipos de menús de aplicación: Options Menu Context Menu Submenu
Menus: Options Menu Contiene un máximo de 6 elementos Si se necesitan más, se incluyen en el menú extendido (aparece al pusar el botón + ) La primera vez que se abra, Android llamará al método  onCreateOptionsMenu()  de la Activity Cuando el usuario presione una opción del menú, se invocará el método  onOptionsItemSelected()
Menus: Context Menu Conceptualmente similar al botón contextual del ratón en el PC Presión sobre la vista unos dos segundos Al aparecer, se invocará el método  onCreateContextMenu() Al seleccionar, se invocará el método  onContextItemSelected()
Menus: Submenus Se puede añadir dentro de cualquier menú, excepto de otro submenú Se añade a nivel de código desde el método  onCreateOptionsMenu() Igual que en los Option Menu, al pulsar de invocará el método  onOptionsItemSelected()
Arquitectura de las aplicaciones: Seguridad y permisos Seguridad basada en el Kernel de Linux, cada paquete tiene un único userID y procesos en sandbox, por lo que no pueden ser afectados entre sí Los permisos son un mecanismo a nivel de aplicación, que permiten el acceso a un recurso determinado (Red, envío de SMS..) Se pueden crear en AndroidManifest.xml < permission android:name=”com.paad.DETONATE_DEVICE” android:protectionLevel=”dangerous” android:label=”Self Destruct” android:description=”@string/detonate_description”> </ permission > Y se pueden asignar en el tag activity: < activity android:name=”.MyActivity” android:label=”@string/app_name” android:permission=”com.paad.DETONATE_DEVICE” > </ activity >
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Entorno de desarrollo: emulador Android El SDK contiene un emulador para testear las aplicaciones desarrolladas Emula tanto hardware como software El emulador soporta configuraciones AVD (Android Virtual Devices), para testear sobre distintas plataformas Android
Entorno de desarrollo: DDMS Siglas de Dalvik Debug Monitor Server Incluido en el SDK Proporciona información del estado de una instancia Android Se conecta al ADB (Android Debugger) y monitoriza una instancia de máquina virtual En IDE Eclipse se puede acceder de forma integrada
Entorno de desarrollo: Hello Android!  package com.android.helloandroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public   class  HelloAndroid  extends  Activity  { /** Called when the activity is first created. */ public void  onCreate(Bundle savedInstanceState)  { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText(&quot;Hello, Android&quot;); setContentView(tv); } }
Índice Historia ¿Qué es Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
Almacenamiento de datos En aplicaciones típicas de escritorio, el sistema operativo ofrece el sistema de ficheros para compartir datos entre aplicaciones En Android, los ficheros son privados por aplicación Para compartir información, se utilizan los Content Providers
Almacenamiento de datos: Preferences Técnica ágil para guardar datos simples de la aplicación Los datos se almacenan en pares key/value Usado típicamente para guardar las preferencias de la aplicación (fuentes, colores..)
Almacenamiento de datos: ficheros locales Por defecto, sólo la aplicación puede acceder a esos ficheros (permisos Unix) Acceso similar a Java estándar, se deben crear inputs y outpus streams Sólo se soportan archivos creados en la misma carpeta que la aplicación Las aplicaciones van a la ruta: /data/app (gratuitas) y /data/app-private (de pago), las nuevas versiones soportan almacenamiento en la SDCard
Almacenamiento de datos: SQLite Cada base de datos es privada para la aplicación, pero pueden acceder todas las clases de esta Android ofrece clases wrapper para almacenar la información en la base de datos (p.e. información de contactos) Las bases de datos se almacenan en la carpeta /data/data/ nombre_package /databases Para compartir la información utilizar ContentProviders
Almacenamiento de datos: SQLite (II) Base de datos Open Source Cumplimenación de estándares de BDs Ligera, no requiere excesivos recursos Las querys (consultas) se devuelven como objetos Cursor, apuntando a la información Utilizada en reproductores MP3, iPhone y iPods Para información detallada:  http://www.sqlite.org

Curso introducción a android

  • 1.
    Introduccióna Android
  • 2.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 3.
    Introducción a Android:un poco de historia
  • 4.
    Introducción a Android:releases Versión Android Fecha release Android 1.5 (Cupcake) 30 abril de 2009 Android 1.6 (Donut) 15 septiembre de 2009 Android 2.0 (Eclair) 26 octubre de 2009 Android 2.2 (FroYo) Mayo de 2010 Gingerbread Finales de 2010
  • 5.
    Introducción a Android:un poco de historia (II) Prototipo HTC Dream Nexus One Xperia x10 HTC Liquid GeeksPhone Samsung I7500
  • 6.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 7.
    Introducción a Android:¿qué es Android? ¿Qué es? Conjunto de software libre que incluye sistema operativo, middleware y aplicaciones. Su objetivo es abstraer el hardware y facilitar el desarrollo de nuevas aplicaciones. SDK: soporte y API para desarrollo de aplicaciones Android. ¿Qué no es? Únicamente un dispositivo móvil Una implementación JAVA ME. Una marca de telefonía ni depende de ningún fabricante La respuesta de Google al IPhone.
  • 8.
    Introducción a Android:¿qué es Android? (II) Características: Conectividad: Navegador integrado, basado en WebKit Soporte telefonía GSM, depende del hardware del teléfono Bluetooth, EDGE, 3G y WI-FI, depende del hardware del teléfono Software: Gráficos optimizados con OpenGL ES 1.0 (Android 2.0 OpenGL ES 2.0) SQLite para el almacenamiento de datos estructurados (Bases de datos) Entorno de desarrollo: emulador, debugger, herramientas de profiling Hardware y multimedia Soporte multimedia, tipo MPEG4, MP3, AMR, JPG, GIF... Camara, GPS, Brújula, acelerómetro, depende del hardware del teléfono
  • 9.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 10.
  • 11.
    Arquitectura Android :LinuxKernel Versión 2.6 del kernel de Linux Android aprovecha la seguridad, gestión de memoria, gestión de procesos, red y modelo de drivers Capa de abstracción entre el hardware y el software
  • 12.
    Arquitectura Android:Linux Kernel(II) Relación versiones Linux por versión Android Versión Android Versión Linux Android 1.5 (Cupcake) 2.6.27 Android 1.6 (Donut) 2.6.29 Android 2.0 (Eclair) 2.6.29 Android 2.2 (Froyo) 2.6.32 Gingerbread 2.6.33
  • 13.
    Arquitectura Android :Androidruntime Utiliza el Kernel de Linux para la ejecución de aplicaciones, procesos y gestión de memoria. Formado por un conjunto de librerías base, para ofrecer funcionalidad elemental y de bajo nivel, escritas en C y C++ Máquina virtual Dalvik, con código preparado teniendo en cuenta la duración de las baterías y la limitación de memoria.
  • 14.
    Arquitectura Android :Dalvik Virtual Machine Condicionantes de los dispositivos móviles: Poca duración de la batería Recursos muy escasos (memoria, cpu) Limitaciones visuales (pantallas poca resolución) Compartición y priorización de recursos Características de la DVM Usada en entornos con restricciones de memoria y procesador Herramienta dx convierte .class (clase o aplicación en JAVA) a dex Ejecuta aplicaciones en formato .dex (Dalvik Executable) Permite la ejecución de varias instancias a la vez No es una JVM, no ejecuta bytecode Clases de Java ME, AWT o Swing no están soportadas
  • 15.
    Librerías Android (I)android.util: paquete de utilidades del core, clases de bajo nivel android.os: acceso a servicios básicos del sistema operativo: (mensajes, reloj...) android.text: mostrar y parsear (transformar) cadenas de texto android.database: gestión de las DBs, cursores, etc android.content: servicios para el acceso a distintos tipos de recursos android.view: clases para la gestión de las vistas android.widget: artefactos nativos de Android: listas, botones ... com.google.android.maps: acceso a controles nativos para mapas
  • 16.
    Librerías Android (II)android.app: acceso al contexto de la aplicación, Actividades y API de servicios android.provider: acceso a ciertos Content Providers android.telephony: acceso a los dispositivos del telefono para comunicación (call, send SMS...) android.location: servicios basados en localización android.media: grabación y reproducción de audio, video, imagenes.. android.opengl: motor de renderización 3D android.hardware: acceso a la cámara, acelerómetro, brújula... Otras librerías: OpenGL, FreeType, SGL, libc, SQLite, SSL
  • 17.
    Arquitectura Android :Framework de aplicaciones Proporciona una plataforma abierta para el desarrollo El desarrollador puede acceder a los dispositivos, información de ubicación, ejecutar servicios, etc, a través del framework Las aplicaciones del core utilizan este mismo framework Views, Content Providers, Managers...
  • 18.
    Arquitectura Android: Capade aplicaciones En esta capa de ubicarán las aplicaciones desarrolladas por el desarrollador Aplicaciones escritas en lenguaje JAVA Aplicaciones incluidas por defecto: Cliente email Gestor SMS Navegador Contactos .JAVA .CLASS .DEX javac dx JVM DVM
  • 19.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 20.
    Arquitectura de lasaplicaciones: Componentes de aplicación Principales componentes para el desarrollo de aplicaciones en Android:
  • 21.
    Entorno de desarrollo:AndroidManifest.xml Cada aplicación debe tener un archivo AndroidManifest.xml en el directorio raíz que define los componentes de aplicación (Activities, Services, etc) que se verán a continuación Da un nombre único a la aplicación, con formato package de Java (com.slashmobility.helloWorld ...) Se declaran permisos y librerías necesarios para ejecutar la aplicación <? xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> < manifest xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; package = &quot;prueba.Android&quot; android:versionCode = &quot;1&quot; android:versionName = &quot;1.0&quot; > < application android:icon = &quot;@drawable/icon&quot; android:label = &quot;@string/app_name&quot; > < activity android:name = &quot;.HelloWord&quot; android:label = &quot;@string/app_name&quot; > < intent-filter > < action android:name = &quot;android.intent.action.MAIN&quot; /> < category android:name = &quot;android.intent.category.LAUNCHER&quot; /> </ intent-filter > </ activity > </ application > < uses-sdk android:minSdkVersion = &quot;7&quot; /> </ manifest >
  • 22.
    Contiene una interfazvisual gráfica Cada Activity debe tener una responsabilidad propia (alta cohesión, bajo acoplamiento) Una aplicación Android puede contener varias Activity, una de ellas marcada como principal Pueden usar componentes visuales, servicios, crear Intents, etc Una Activity puede invocar a otra (subActivity) Arquitectura de las aplicaciones: Componente Activity
  • 23.
    Ciclo de vidade la Activity ANR si la Activity no responde a un evento en 5 segundos Mensaje ANR Estados de la Activity
  • 24.
    Arquitectura de lasaplicaciones: Componente Service Se ejecutan en el background (no tienen UI). Pueden actualizar Content Providers, lanzar Intents, notificaciones... Tienen más prioridad que la Activity estándar Aplicaciones que no necesitan interacción con el usuario son buenas candidatas a ser servicios Location Manager, Media Controller, Notification Manager son ejemplos de Services.
  • 25.
    Ciclo de vidadel Service (según creación)
  • 26.
    Arquitectura de lasaplicaciones: Componente Content Provider Mecanismo genérico para compartir datos entre aplicaciones Permite desacoplar la capa de aplicación de la capa de datos (data-source agnostic) Accesible utilizando una simple URI Browser: permite leer o modificar bookmarks, historial del navegador, o búsquedas web CallLog: permite ver o modificar el historial de llamadas (entrantes o salientes) Contacts: Recupera, modifica, o almacena detalles de contactos
  • 27.
    Arquitectura de lasaplicaciones: Intents Intent: usado como mecanismo para el paso de mensajes, declara la intención de realizar una acción Utilizados para iniciar Activities o difundir mensajes. Útiles para desacoplar componentes (no necesitan conocer implementaciones) Existen acciones nativas que pueden ser lanzadas con los Intents (crean las Actividades para realizar esas acciones)
  • 28.
    Arquitectura de lasaplicaciones: Intents (II) Contienen : Action: La acción general a realizar, tal como ACTION_VIEW, ACTION_EDIT... Data: Los datos sobre los que la acción debe operar. Estos se expresan en forma URI (Uniform Resource Identifier) Ejemplo de pares Action / Data: ACTION_VIEW: content://contacts/people/1 ACTION_DIAL: tel://687123456 ACTION_DIAL: content://contacts/people/2
  • 29.
    Arquitectura de lasaplicaciones: Intents (III) Atributos adicionales: Category: ofrece información adicional sobre el tipo de componente que debe recoger el Intent Type: tipo MIME de los datos del Intent. No es necesario por defecto Component: indica qué componente (clase) especificado en AndroidManifest.xml realizará la acción del Intent. Si se especifica, se entregará a una instancia de esa clase, si no Android buscará el componente que mejor considere. Extras: información adicional, con pares key-value
  • 30.
    Arquitectura de lasaplicaciones: Intents (V) En los Intents, se puede especificar el destinatario o no: Si se establece un destinatario (vía setComponent(ComponentName)), se le envía directamente. Si no hay destinatario, se debe incluir suficiente información para que Android determine el mejor componente candidato para ejecutar el Intent Android utiliza los Intent-filters para buscar el mejor candidato
  • 31.
    Intents: Acciones predeterminadasACTION_ANSWER: Abre una Actividad para gestionar llamadas entrantes. ACTION_CALL: Inicia una llamada utilizando el número pasado en el URI. ACTION_DELETE: Borra una entrada de datos especificados en el URI. ACTION_DIAL: Aparece el dialer con el número especificado. ACTION_EDIT: Invoca una actividad para editar la información del URI. ACTION_INSERT: inserta nuevos items (por ejemplo, lista de contactos) ACTION_PICK: recupera información de un item ACTION_SEARCH: Invoca una actividad para realizar búsquedas. ACTION_SENDTO: envia un mensaje a un contacto. ACTION_SEND: envía la información especificada en el URI. ACTION_VIEW: petición para ver una información de la mejor manera posible. ACTION_WEB_SEARCH: realiza búsquedas Web de la información del URI.
  • 32.
    Arquitectura de lasaplicaciones: Intent filters Intent Intent
  • 33.
    Arquitectura de lasaplicaciones: Broadcast Intents Intent Intents
  • 34.
    Arquitectura de lasaplicaciones: Componente Broadcast Receiver Broadcast Receivers son utilizados para escuchar Broadcast Intents. Para utilizarlos, necesitan ser registrados (via código o AndroidManifest.xml) Se utilizan Intent Filters para especificar que Intents se están esperando
  • 35.
    Arquitectura de lasaplicaciones: Resources Los recursos (Resources) son elementos externos que se quieren incluir y referenciar en la aplicación Ejemplos: Imagenes, videos, audio, textos... Los recursos de /res son accesibles a través de la clase R (compilada por Android automáticamente) con R.carpeta.recurso Soporte para i18n
  • 36.
    Arquitectura de lasaplicaciones: Interfaces de usuario En Android, las interfaces se construyen utilizando los objetos View y ViewGroup Las Views son el punto de interacción con el usuario Las ViewGroup son una agrupación lógica de elementos visuales
  • 37.
    Interfaces de usuario:Layouts También conocidos como Layout Managers Son extensiones de ViewGroup Su objetivo es controlar la posición de las Views hijas en la pantalla Se pueden anidar, es decir, incluir Layouts dentro de Layouts Android proporciona una serie de Layouts por defecto
  • 38.
    Interfaces de usuario:Layouts (II) FrameLayout: el más simple, añade cada View hija en la esquina superior izquierda. Cada vez que se añade una, tapa la anterior, diseñado para mostrar un único elemento. LinearLayout: añade cada View hija en linea recta (horizontal o vertical) RelativeLayout: añade las Views relativamente unas a otras TableLayout: añade las Views usando un grid (cuadrícula), a través de filas y columnas. Es similar a las tablas HTML. AbsoluteLayout: añade las vistas dando coordenadas absolutas LinearLayout RelativeLayout AbsoluteLayout
  • 39.
    Arquitectura de lasaplicaciones: Notificaciones al usuario Algunos sucesos requieren ser notificados al usuario Algunas notificaciones requieren respuesta del usuario, otras no Ejemplos: batería baja, confirmación de recepción de un archivo, barras de progreso, etc Para cada tipo de notificación se requerirá una manera concreta de informar al usuario: vibración, iluminación LEDs Toast Status Ba r Dialog
  • 40.
    Interfaces de usuario:componentes compuestos (I) Normalmente hacen referencia a Views con funcionalidad compleja añadida Para crear widgets, se pueden crear Views y añadirle métodos para la gestión de eventos, componentes visuales, etc Se pueden extender (heredar) widgets de Android por defecto, sobreescribiendo la funcionalidad que se necesite
  • 41.
    Interfaces de usuario:componentes compuestos (II) TextView EditText con un Button ListView Spinner
  • 42.
    Interfaces de usuario:componentes compuestos (III) DatePicker TimePicker AutoComplete
  • 43.
    Interfaces de usuario:Menus Revelan la funcionalidad de la aplicación Tres tipos de menús de aplicación: Options Menu Context Menu Submenu
  • 44.
    Menus: Options MenuContiene un máximo de 6 elementos Si se necesitan más, se incluyen en el menú extendido (aparece al pusar el botón + ) La primera vez que se abra, Android llamará al método onCreateOptionsMenu() de la Activity Cuando el usuario presione una opción del menú, se invocará el método onOptionsItemSelected()
  • 45.
    Menus: Context MenuConceptualmente similar al botón contextual del ratón en el PC Presión sobre la vista unos dos segundos Al aparecer, se invocará el método onCreateContextMenu() Al seleccionar, se invocará el método onContextItemSelected()
  • 46.
    Menus: Submenus Sepuede añadir dentro de cualquier menú, excepto de otro submenú Se añade a nivel de código desde el método onCreateOptionsMenu() Igual que en los Option Menu, al pulsar de invocará el método onOptionsItemSelected()
  • 47.
    Arquitectura de lasaplicaciones: Seguridad y permisos Seguridad basada en el Kernel de Linux, cada paquete tiene un único userID y procesos en sandbox, por lo que no pueden ser afectados entre sí Los permisos son un mecanismo a nivel de aplicación, que permiten el acceso a un recurso determinado (Red, envío de SMS..) Se pueden crear en AndroidManifest.xml < permission android:name=”com.paad.DETONATE_DEVICE” android:protectionLevel=”dangerous” android:label=”Self Destruct” android:description=”@string/detonate_description”> </ permission > Y se pueden asignar en el tag activity: < activity android:name=”.MyActivity” android:label=”@string/app_name” android:permission=”com.paad.DETONATE_DEVICE” > </ activity >
  • 48.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 49.
    Entorno de desarrollo:emulador Android El SDK contiene un emulador para testear las aplicaciones desarrolladas Emula tanto hardware como software El emulador soporta configuraciones AVD (Android Virtual Devices), para testear sobre distintas plataformas Android
  • 50.
    Entorno de desarrollo:DDMS Siglas de Dalvik Debug Monitor Server Incluido en el SDK Proporciona información del estado de una instancia Android Se conecta al ADB (Android Debugger) y monitoriza una instancia de máquina virtual En IDE Eclipse se puede acceder de forma integrada
  • 51.
    Entorno de desarrollo:Hello Android! package com.android.helloandroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText(&quot;Hello, Android&quot;); setContentView(tv); } }
  • 52.
    Índice Historia ¿Quées Android? Arquitectura del sistema Arquitectura de las aplicaciones Entorno de desarrollo Almacenamiento de datos
  • 53.
    Almacenamiento de datosEn aplicaciones típicas de escritorio, el sistema operativo ofrece el sistema de ficheros para compartir datos entre aplicaciones En Android, los ficheros son privados por aplicación Para compartir información, se utilizan los Content Providers
  • 54.
    Almacenamiento de datos:Preferences Técnica ágil para guardar datos simples de la aplicación Los datos se almacenan en pares key/value Usado típicamente para guardar las preferencias de la aplicación (fuentes, colores..)
  • 55.
    Almacenamiento de datos:ficheros locales Por defecto, sólo la aplicación puede acceder a esos ficheros (permisos Unix) Acceso similar a Java estándar, se deben crear inputs y outpus streams Sólo se soportan archivos creados en la misma carpeta que la aplicación Las aplicaciones van a la ruta: /data/app (gratuitas) y /data/app-private (de pago), las nuevas versiones soportan almacenamiento en la SDCard
  • 56.
    Almacenamiento de datos:SQLite Cada base de datos es privada para la aplicación, pero pueden acceder todas las clases de esta Android ofrece clases wrapper para almacenar la información en la base de datos (p.e. información de contactos) Las bases de datos se almacenan en la carpeta /data/data/ nombre_package /databases Para compartir la información utilizar ContentProviders
  • 57.
    Almacenamiento de datos:SQLite (II) Base de datos Open Source Cumplimenación de estándares de BDs Ligera, no requiere excesivos recursos Las querys (consultas) se devuelven como objetos Cursor, apuntando a la información Utilizada en reproductores MP3, iPhone y iPods Para información detallada: http://www.sqlite.org